//
//  UITextView+Emoticon.swift
//  01 表情键盘
//
//  Created by danli on 15/12/29.
//  Copyright © 2015年 danli. All rights reserved.
//

import UIKit

extension UITextView
{
    
    func emoticonText() -> String
    {
        var textM:String = ""
        let text = attributedText.string
        // 拼接textView的文本，把图片改为图片名称
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (result, range, _) -> Void in
            
            if let attachment = result["NSAttachment"]
            {
                // 截取图片名称
                let attach = attachment as! DLTextAttachment
                // 图片，获取图片名称
                textM.appendContentsOf(attach.chs!)
                
            }
            else
            {
                // 截取文字
                textM.appendContentsOf((text as NSString).substringWithRange(range))
            }
        }
        return textM
    }
    
    func insertEmoticon(emoticon:DLEmoticon)
    {
        // 如果插入的表情是删除按钮，则删除最后一个文本
        if emoticon.removeEmoticon
        {
            // 删除textView的最后一个文本
            self.deleteBackward()
        }
        
        // 当选中的emoji表情时，显示表情
        if let emoji = emoticon.emoji
        {
            insertText(emoji)
            return
        }
        
        // 当选中的是图片表情时， 使用textView的属性文本中的附件来添加表情
        if let imagePath = emoticon.imagePath
        {
            // 添加附件
            let attachment = DLTextAttachment()
            attachment.image = UIImage(contentsOfFile: imagePath)
            attachment.chs = emoticon.chs
            
            // 获取当前选中的位置
            let sRange = selectedRange
            
            // 获取textView的当前文本
            let text = self.attributedText
            let attributedText = NSMutableAttributedString(attributedString: text)
            
            // 设置图片的位置和大小
            let width = font!.lineHeight
            attachment.bounds = CGRect(x: 0, y: -(width * 0.2), width: width, height: width)
            // 将图片添加到可变的属性变量中
            let attributedImage = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
            // 设置图片的font值大小，否则当文本输入的前一个文本是图片时，由于其没有font值，导致要信添加的图片没有可参照的大小值，导致图片显示的大小不正确
            attributedImage.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            
            attributedText.replaceCharactersInRange(sRange, withAttributedString: attributedImage)
            
            //            attributedText.appendAttributedString(attributedImage)
            self.attributedText = attributedText
            
            // 移动光标位置
            selectedRange = NSRange(location: sRange.location + 1, length: 0)
            
            // 当向textView中添加表情图片时，textView不会发出UITextViewTextDidChangeNotification通知
            //也不会调用代理方法
            // 手动调用发出通知和代理方法
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            self.delegate?.textViewDidChange?(self)
        }
    }
}
